package com.maiji.cloud.service;

import com.baomidou.mybatisplus.service.IService;
import com.maiji.cloud.entities.community.ComMsgInfo;
import com.maiji.cloud.entities.community.ComMsgTransmitRule;
import com.maiji.cloud.request.BaseInputDto;
import com.maiji.cloud.request.IdInputDto;
import com.maiji.cloud.request.ReqMetaData;
import com.maiji.cloud.request.community.*;
import com.maiji.cloud.response.BaseDataResDto;
import com.maiji.cloud.response.BaseMetaResDto;
import com.maiji.cloud.response.BaseOutPutDto;
import com.maiji.cloud.response.BaseResDto;
import com.maiji.cloud.response.community.ComDetailOutputDto;
import com.maiji.cloud.response.community.ComMsgBaseOutputDto;
import com.maiji.cloud.response.community.ComRecsOutputDto;
import com.maiji.cloud.response.community.CommunityStatisticsOutputDto;
import com.maiji.cloud.response.shopingmall.FinancialDetailsResData;
import com.sun.istack.NotNull;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestHeader;

import java.util.Date;
import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author ${author}
 * @since 2019-06-19
 */

public interface CommunityService extends IService<ComMsgInfo> {

    /**
     * 发送动态
     * @param reqDto
     * @param token
     * @return
     */
    public BaseOutPutDto<ComRecsOutputDto> publishCom(BaseInputDto<ComPubComInputDto> reqDto, String token);

    /**
     * 动态详细
     * @param maijiToken
     * @return
     */
    public BaseOutPutDto<ComDetailOutputDto> detailMsg(@RequestBody BaseInputDto<IdInputDto> inputDto, @RequestHeader("maijiToken")String maijiToken);


    /**
     * 案例列表
     * @param inputDto
     * @param maijiToken
     * @return
     */
    public BaseOutPutDto<List<ComRecsOutputDto>> caseList(BaseInputDto<ComRecsInputDto> inputDto,String maijiToken);

    /**
     * 推荐列表  priority 优先级>=1
     * @param inputDto
     * @param maijiToken
     * @return
     */
    public BaseOutPutDto<List<ComRecsOutputDto>> recommends(BaseInputDto<ComRecsInputDto> inputDto,String maijiToken);

    /**
     * 普通列表  priority 优先级>=0
     * @param inputDto
     * @param maijiToken
     * @return
     */
    public BaseOutPutDto<List<ComRecsOutputDto>> commonMsgs(BaseInputDto<ComRecsInputDto> inputDto,String maijiToken);


    /**
     * 社区通用列表查询
     * @param inputDto
     * @param maijiToken
     * @param
     * @return
     */

    public BaseOutPutDto<List<ComRecsOutputDto>> msgList(BaseInputDto<ComRecsInputDto> inputDto,String maijiToken);

    /**
     * 关注人动态
     * @param inputDto
     * @param maijiToken
     * @return
     */
    public BaseOutPutDto<List<ComRecsOutputDto>> focusersBlogList(@RequestBody BaseInputDto<ComRecsInputDto> inputDto, @RequestHeader("maijiToken")String maijiToken);


    /**
     * 我的动态列表
     * @param inputDto
     * @param maijiToken
     * @return
     */
    public BaseOutPutDto<List<ComRecsOutputDto>> mineBlogList(@RequestBody BaseInputDto inputDto,String maijiToken);

    /**
     * 用户动态列表
     * @param inputDto
     * @return
     */
    public BaseOutPutDto<List<ComRecsOutputDto>> userBlogList(@RequestBody BaseInputDto<IdInputDto> inputDto,String maijiToken);



    /**
     * 用户被推荐过的动态列表 priority 优先级>=1
     * @param inputDto
     * @param maijiToken
     * @return
     */
    public BaseOutPutDto<List<ComRecsOutputDto>> userHotList(@RequestBody BaseInputDto<IdInputDto> inputDto,String maijiToken);

    /**
     * 用户社区收藏列表
     * @param inputDto
     * @param maijiToken
     * @return
     */
    public BaseOutPutDto<List<ComRecsOutputDto>> userCollectList(@RequestBody BaseInputDto inputDto,String maijiToken);


    /**
     * 社区置顶列表
     * @param inputDto
     * @param maijiToken
     * @return
     */
    public BaseOutPutDto<List<ComRecsOutputDto>> topList(@RequestBody BaseInputDto inputDto,String maijiToken);


    /**
     * 可转发得积分列表
     * @param inputDto
     * @param maijiToken
     * @return
     */
    public BaseOutPutDto<List<ComRecsOutputDto>> integralList(@RequestBody BaseInputDto<ComRecsInputDto> inputDto,String maijiToken);


    /**
     * 发现 、 精选 、 积分通用接口
     * @param inputDto
     * @param maijiToken
     * @return
     */
    public BaseOutPutDto<List<ComRecsOutputDto>> unionMsgList(BaseInputDto<ComRecsInputDto> inputDto,String maijiToken);

    /**
     * 分享成功调用
     * @param inputDto
     * @param maijiToken
     * @return
     */
    public BaseOutPutDto<FinancialDetailsResData> shareSuc(@RequestBody BaseInputDto<IdInputDto> inputDto, @RequestHeader("maijiToken")String maijiToken);


    /**
     * 搜索动态
     * @param inputDto
     * @param maijiToken
     * @return
     */
    public BaseOutPutDto<List<ComRecsOutputDto>> searchMsg(@RequestBody BaseInputDto<ComSearchInputDto> inputDto, @RequestHeader("maijiToken")String maijiToken);


    /**
     * 添加动态@列表
     * @param inputDto
     * @return
     */
    public BaseOutPutDto<String> addAtList(@RequestBody BaseInputDto<List<ComAtWhoInputDto>> inputDto);


    /**
     * 用户删除动态
     * @param inputDto
     * @param maijiToken
     * @return
     */
    public BaseOutPutDto<String>delete(BaseInputDto<IdInputDto> inputDto,String maijiToken);


    /**
     * 管理员删除动态
     * @param inputDto
     *
     * @return
     */
    public BaseOutPutDto<String>managerDelete(BaseInputDto<IdInputDto> inputDto);


    /**
     * 动态设置为精选
     * @param inputDto
     * @return
     */
    public BaseOutPutDto<String>setEssence(BaseInputDto<IdInputDto> inputDto);

    /**
     * 动态设置为案例
     * @param inputDto
     * @return
     */
    public BaseOutPutDto<String>setCase(BaseInputDto<IdInputDto> inputDto);

    /**
     * 设置转发得积分
     * @param inputDto
     * @return
     */
    public BaseOutPutDto<String> setIntegral(BaseInputDto<IdInputDto> inputDto);

    /**
     * 取消转发积分
     * @param inputDto
     * @return
     */
    public BaseOutPutDto<String> cancelIntegral(BaseInputDto<IdInputDto> inputDto);

    /**
     * 管理消息置顶
     * @param inputDto
     * @return
     */
    public BaseOutPutDto<String> topListManager(BaseInputDto<ComMsgTopManInputDto>inputDto);
    /**
     * 数量统计
     * @return
     */
	public BaseOutPutDto<CommunityStatisticsOutputDto> communityStatisticsQuantity(String userId);

    BaseMetaResDto<List<ComMsgInfo>> findAllComMsgInfos(Integer priority, String nickName, String content, String act, Boolean isolation, List<Long> publishTimes, ReqMetaData metaData);

    BaseMetaResDto<List<ComMsgInfo>> findAllMidComMsgInfos(Integer priority, String nickName, String content, String act, Boolean isolation, List<Long> publishTimes, ReqMetaData metaData);

    BaseResDto editComMsgInfo(ComMsgInfo comMsgInfo);

    BaseDataResDto<ComMsgBaseOutputDto> findComMsgById(String msgId);

    /**
     * 根据活动搜索动态列表 ， 置顶独立
     * @param inputDto
     * @param maijiToken
     * @return
     */
    public BaseOutPutDto<List<ComRecsOutputDto>> findMsgsByActName(BaseInputDto<ComRecsInputDto> inputDto,String maijiToken);

    /**
     * 首页列表
     * @param inputDto
     * @param maijiToken
     * @return
     */
    public BaseOutPutDto<List<ComRecsOutputDto>> homePageList(BaseInputDto<ComRecsInputDto> inputDto,String maijiToken);


    /**
     * 更新转发得积分基本规则
     * @param inputDto
     * @return
     */
    public BaseOutPutDto updMsgTransmitRule (BaseInputDto<ComMsgTransmitRule> inputDto );

    /**
     * 得倒转发得积分基本规则
     * @return
     */
    public BaseOutPutDto<ComMsgTransmitRule> findMsgTransmitRule ();

    BaseDataResDto<ComMsgTransmitRule> findComMsgTransmitRule();


    /**
     * 加载msginfo实体类信息
     * @param comMsgInfos
     * @return
     */
    public BaseOutPutDto<List<ComRecsOutputDto>> reloadMsgInfos(@NotNull List<ComMsgInfo> comMsgInfos, String userId);


    /**
     * 加载msginfo实体类信息
     * @param comMsgInfos
     * @returnfindListByMsgIds
     */
    public BaseOutPutDto<List<ComRecsOutputDto>> reloadMsgInfosNoDelete(@NotNull List<ComMsgInfo> comMsgInfos,String userId);

    BaseResDto editComMsgTransmitRule(ComMsgTransmitRule rule);

    BaseDataResDto<List<ComMsgTransmitRule>> findAllComMsgTransmitRuleLogs(List<Date> editDates);
}
